package jschool.modelos;

import java.util.ArrayList;

import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.TableColumn;

import jschool.entidades.Asistencia;
import jschool.entidades.Estudiante;
import jschool.manejadores.ManejadorDeAsistencia;

public class ModeloDeAsistencia extends AbstractTableModel {
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private static ModeloDeAsistencia instancia = null;
	private ManejadorDeAsistencia manejadorDeAsistencia = null;
	private ArrayList<Estudiante> estudiantes = null;
	private String[] encabezado = null;
	private Asistencia asistencia = null;

	public static ModeloDeAsistencia getInstancia() {
		if (instancia == null) {
			instancia = new ModeloDeAsistencia();
		}
		return instancia;
	}

	public ModeloDeAsistencia() {
		manejadorDeAsistencia = ManejadorDeAsistencia.getInstancia();
		estudiantes = manejadorDeAsistencia.getEstudiantePorCurso(1);
		encabezado = new String[] { "No", "Estudiante", "Estado", "ID" };

	}

	public String getColumnName(int posicion) {
		return encabezado[posicion];
	}

	public int getColumnCount() {

		return encabezado.length - 1;
	}

	public Object getElementAt(int indice) {
		return estudiantes.get(indice);
	}

	@Override
	public int getRowCount() {

		return manejadorDeAsistencia.getAsistencia().size();
	}

	@Override
	public Object getValueAt(int fila, int col) {
		asistencia = manejadorDeAsistencia.getAsistencia().get(fila);
		Estudiante estudiante = estudiantes.get(fila);
		String retorno = "";
		switch (col) {
		case 0:
			retorno = String.valueOf(fila + 1);
			break;
		case 1:
			retorno = estudiante.getNombre().concat(" ")
					+ estudiante.getApellido();
			break;
		case 2:
			return asistencia.getEstado();
		case 3:
			retorno = String.valueOf(estudiante.getIdEstudiante());
		}

		return retorno;
	}

	public void setValueAt(Object valor, int fila, int col) {
		Asistencia asistencia = manejadorDeAsistencia.getAsistencia().get(fila);
		switch (col) {
		case 0:
			break;
		case 1:
			break;
		case 2:
			asistencia.setEstado((Boolean) valor);
			break;

		}

	}

	public boolean isCellEditable(int fila, int columna) {
		if (columna == 2) {
			if (asistencia.getEstado() == true) {
				System.out.println((String) this.getValueAt(fila, 3));
				manejadorDeAsistencia.modificarAsistenciaEstudiante(Integer
						.parseInt((String) this.getValueAt(fila, 3)), false);
				fireTableDataChanged();
				return true;
			} else {
				manejadorDeAsistencia.modificarAsistenciaEstudiante(Integer
						.parseInt((String) this.getValueAt(fila, 3)), true);
				System.out.println((String) this.getValueAt(fila, 3));
				fireTableDataChanged();
				return true;
			}
		}
		return false;

	}

	public Class getColumnClass(int columna) {
		return getValueAt(0, columna).getClass();
	}

	public void disminuirColumna(JTable tabla) {
		TableColumn columna = null;
		for (int i = 0; i < 3; i++) {
			columna = tabla.getColumnModel().getColumn(i);

			if (i == 0) {
				columna.setMaxWidth(25);
			} else if (i == 2) {
				columna.setMaxWidth(60);
			} else {
				columna.getPreferredWidth();
			}
		}
	}

}
